package com.feihong.txgw.utils;

import android.text.TextUtils;
import android.util.Base64;

import com.alibaba.fastjson.JSON;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.EncodeUtils;
import com.blankj.utilcode.util.EncryptUtils;
import com.feihong.txgw.global.GlobalContents;

import java.security.Key;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.UUID;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

/**
 * @name txgw_app
 * @class name：com.feihong.txgw.utils
 * @class describe: 数据请求参数加密
 * @author wangziheng
 * @time 2017/7/19 16:46
 * @change
 * @chang time
 * @class describe
 */
public class TokenUtils {

    /**
     * 密钥
     */
    private static final String SIGEN = "ca43567f18f93d7f8b6631a56fab04eb";

    private final static String secretKey = "Tong1TCssa77XunGu00aqxD2";
    /**
     * 向量
      */
    private final static String iv = "01234567";
    /**
     * 加解密统一使用的编码方式
     */
    private final static String encoding = "utf-8";


//    public RequestParams setSigen(RequestParams requestParams) {
//        HashMap<String, String> params = new HashMap<>();
//        for (KeyValue item : requestParams.getBodyParams()) {
//            params.put(item.key, item.getValueStr());
//        }
//
//        //清理之前获取文件列表
//        List<KeyValue> files = requestParams.getFileParams();
//
//        requestParams.clearParams();
//
//        //清理完毕后，重新添加文件列表
//        if (files != null && files.size() > 0) {
//            for (KeyValue item : files) {
//                requestParams.addParameter(item.key, item.value);
//            }
//            requestParams.setConnectTimeout(45 * 1000);
//            requestParams.setReadTimeout(45 * 1000);
//        }
//
//        String token = UserLoginInfo.getUserToken();
//        if (!TextUtils.isEmpty(token)) {
//            requestParams.addBodyParameter("token", token);
//        }
//        //推送的ID
//        String identify = PreferenceTools.getString(GlobalContents.REGID, UUID.randomUUID().toString());
//
//        requestParams.addBodyParameter("version", AppUtils.getAppVersionName());
//        // 手机唯一标识
//        params.put("identify", identify);
//        params.put("version", AppUtils.getAppVersionName());
//        //请求形式Post
//        params.put("reqtype", "post");
//        params.put("timestamp", System.currentTimeMillis() / 1000 + "");
//        if (UserLoginInfo.isUserLogin()) {
//            params.put("mobile", UserLoginInfo.getUserPhone());
//            params.put("user_id", UserLoginInfo.getUserId());
//        }
//
//        Map<String, String> map = new TreeMap<String, String>(
//                new Comparator<String>() {
//                    @Override
//                    public int compare(String obj1, String obj2) {
//                        // 升序排序
//                        return obj1.compareTo(obj2);
//                    }
//                });
//        String data = JSON.toJSONString(params);
//        try {
//            data = encrypt(data);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        data = new String(EncodeUtils.base64Encode(data));
//        map.put("version", AppUtils.getAppVersionName());
//        requestParams.addBodyParameter("data", data);
//        map.put("data", data);
//        if (!TextUtils.isEmpty(token)) {
//            map.put("token", token);
//        }
//
//        Set<String> set = map.keySet();
//        StringBuffer sb = new StringBuffer();
//        int num = 0;
//        for (Iterator<String> iter = set.iterator(); iter.hasNext(); ) {
//            String key = iter.next();
//            sb.append(key + "=" + map.get(key));
//
//            if (num < set.size() - 1) {
//                sb.append("&");
//            }
//            num += 1;
//        }
//        String handled_str = sb.toString().trim();
//        String sign = EncryptUtils.encryptMD5ToString(handled_str + "|||" + SIGEN);
//        requestParams.addBodyParameter("sign", sign.toLowerCase());
//        return requestParams;
//    }
//
//    public String setSigen(HashMap<String, String> requestParams) {
//        HashMap<String, String> params = new HashMap<>();
//        String token = UserLoginInfo.getUserToken();
//        Iterator<Map.Entry<String, String>> items = requestParams.entrySet().iterator();
//        StringBuffer stringBuffer = new StringBuffer();
//        while (items.hasNext()) {
//            Map.Entry<String, String> item = items.next();
//            params.put(item.getKey(), item.getValue());
//            stringBuffer.append(item.getKey()+":"+item.getValue());
//        }
//        requestParams.clear();
//        requestParams = new HashMap<>();
//        requestParams.put("token", token);
//        requestParams.put("version", AppUtils.getAppVersionName());
//        //推送的ID
//        String identify = PreferenceTools.getString(GlobalContents.REGID, UUID.randomUUID().toString());
//        // 手机唯一标识
//        params.put("identify", identify);
//        params.put("version", AppUtils.getAppVersionName());
//        params.put("reqtype","get");
//        if (UserLoginInfo.isUserLogin()) {
//            params.put("mobile", UserLoginInfo.getUserPhone());
//            params.put("user_id", UserLoginInfo.getUserId());
//        }
//        params.put("timestamp", System.currentTimeMillis() / 1000 + "");
//        Map<String, String> map = new TreeMap<String, String>(
//                new Comparator<String>() {
//                    @Override
//                    public int compare(String obj1, String obj2) {
//                        // 升序排序
//                        return obj1.compareTo(obj2);
//                    }
//                });
//        String data = JSON.toJSONString(params);
//        try {
//            data = encrypt(data);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        data = new String(EncodeUtils.base64Encode(data));
//        map.put("version", AppUtils.getAppVersionName());
//        requestParams.put("data", data);
//        map.put("data", data);
//        map.put("token", token);
//
//        Set<String> set = map.keySet();
//        StringBuffer sb = new StringBuffer();
//        int num = 0;
//        for (Iterator<String> iter = set.iterator(); iter.hasNext(); ) {
//            String key = iter.next();
//            sb.append(key + "=" + map.get(key));
//
//            if (num < set.size() - 1) {
//                sb.append("&");
//            }
//            num += 1;
//        }
//        String handled_str = sb.toString().trim();
//        String sign = EncryptUtils.encryptMD5ToString(handled_str + "|||" + SIGEN);
//        requestParams.put("sign", sign.toLowerCase());
//
//        //生成URL get参数
//        sb = new StringBuffer();
//        Iterator<Map.Entry<String, String>> newitems = requestParams.entrySet().iterator();
//        int index = 0;
//        int lastIndex = requestParams.size() - 1;
//        while (newitems.hasNext()) {
//            Map.Entry<String, String> item = newitems.next();
//            sb.append(item.getKey() + "=" + item.getValue());
//            if (index < lastIndex) {
//                sb.append("&");
//            }
//            index++;
//        }
//        return sb.toString();
//    }
//
//    private String encrypt(String plainText) throws Exception {
//        Key deskey = null;
//        DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes("UTF-8"));
//        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
//        deskey = keyfactory.generateSecret(spec);
//
//        Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
//        IvParameterSpec ips = new IvParameterSpec(iv.getBytes("UTF-8"));
//        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
//        byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding));
//        return Base64.encodeToString(encryptData, Base64.DEFAULT);
//    }
}
